約 2,727,379 件
https://w.atwiki.jp/debuggingclown/pages/14.html
Perl this page is for Perl programmer. end
https://w.atwiki.jp/honeybe/pages/19.html
perlTips配列の要素数を取る。 正規表現で置換 日付計算:月末日を算出する。 外部プログラムを実行する。 参考URL なにかあればどうぞ perl Tips 配列の要素数を取る。 print @hoge; 配列変数(@hoge)を参照すれば配列の要素数が分かる。 引数チェックなどに使用する。 if (@ARGV 2) { print "Usage hoge.pl hoge moge\n"; exit; } 正規表現で置換 $hoge =~ s/[\/ ]/-/g $hoge内の/と を-に置き換える。 s/で置換開始。 最後の/後はオプション。代表的なオプションは下記。g 繰り返し。可能な限りマッチさせ、置換する。 i 大文字小文字の区別をしない。 日付計算:月末日を算出する。 http //www.futomi.com/subroutine/getlastday.html 参照。 外部プログラムを実行する。 exec system `(backtick演算子) $result = `ls -la /tmp/` 参考URL http //www.site-cooler.com/kwl/perl/ http //www.stackasterisk.jp/tech/program/perl01_01.jsp なにかあればどうぞ 名前 コメント
https://w.atwiki.jp/webmarketingyougo/pages/50.html
Perl(パール)とは、ラリー・ウォールによって開発されたプログラミング言語である。 実用性と多様性を重視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング言語の優れた機能を取り入れている。 ウェブ・アプリケーション、システム管理、テキスト処理などのプログラムを書くのに広く用いられている。 言語処理系としてのperlはフリーソフトウェアである。Artistic LicenseおよびGPLのもとで配布されており、誰でもどちらかのライセンスを選択して利用することができる。 UNIXやWindowsなど多くのプラットフォーム上で動作する。
https://w.atwiki.jp/syohonosyoho/pages/18.html
[部分編集] perl installinstall-PAR-ppmでno missing error(参考) exe化コマンド(pp) GUI メモとりあえず 日本語表示(参考)utf-8フラグについて split-第二引数に@は使えない。使うと要素数を返す。 wait key 配列の要素数(参考 print 36進数<=>10進数 (参考) コメントアウト(複数行)参考 論理演算子 ENDサブルーチン(スクリプト終了時に実行)参考 useとrequireの違い 重複値の削除 マッチングー正規表現ー ファイル操作 GUI入門 メモ ファイルを開くダイアログ(参考) Textfield XML デバッグモード Mechanize文字化け対策 install install-PAR- exeファイルを作りたいので「perl exe」で検索 参考 の通り行うとuse Encodeもつかえた。(^^) ActivePerlの各Ver PARのVer 以下は試行錯誤の残骸 +... こことここをみてinstall[[ここ http //nabe.blog.abk.nu/par510]]はうまくいかない。PAR実行時にperl510.dllがなんたらどうやらuse Encode使うと出るエラーのよう 追記 なんだかWin32 GUIモジュールを使ったスクリプトがexe化した後実行エラーになる。(他のモジュールもいくつかアウト) そこでActivePerl5.10に乗り換え。なんか色々ごちゃごちゃして何やったか憶えてないけど、とりあえずWin32 GUIは動いた(しかしmixi_exportはperl510.dllがないと言われる) やったことMinGWをインストール。PATHにC \MinGW\bin;追加。再起動。 PPM(GUI)でCompress Raw Zlibをupdate(pp実行時にCant loadと言われたので) PARはhttp //downloads.activestate.com/ActivePerl/Windows/をみて、Active Perlのverにあったものを use Encodeが使えないのは不便なのでActivePerl再インストール。 そしたらpp使えなくなった(涙 5.8.9入れたら使えた。でもuse Encodeは使えない ppmでno missing error(参考) ppm search xxxx で出てきた数字を ppm install 数字 exe化コマンド(pp) pp -o hoge.exe hoge.pl cui非表示 pp --gui -o hoge.exe hoge.pl 注意:exe化する際packegeをrequireするときは条件文の中ではしない するとlibに含まれない。ならuseにしてしまえばいいとも思う。 GUI ここの通り行う。 THE GUI LOFTのページリンクだけここに変更 GUI TEST メモ [部分編集] とりあえず とほほのperl入門 Perl基礎入門 Perl講座 日本語表示(参考) 文頭で use utf8; binmode STDIN, " encoding(cp932)"; binmode STDOUT, " encoding(cp932)"; ※binmodeはPARで作ったEXEがうまく動かない 追記 useEncodeを行うとPARで出来たexeが動かない ただしGUI上ではこれはうまく動かない GUI Labelは use utf8;を使わない。 ListBoxでは decode( charaset ,$string); ※入力時 print encode( charaset ,$string); ※出力時 charasetはwin上ではcp932が多いように思う。 がコマンドプロンプトでchcpで確認する。 ここの方がわかりやすいかも utf-8フラグについて ここ split-第二引数に@は使えない。使うと要素数を返す。 @var=split(/nanika/,$list[i]) wait key $wait= STDIN ;#STDINは省略可能 配列の要素数(参考 # 最後の添字を取得(この場合は2。配列が空の場合は-1) $num = $#hoge; # 要素数を取得(この場合は3。配列が空の場合は0) $num = @hoge; print 変数の中身を出力するときは””(ダブルクォーテーション)で囲む print "@hoge" ----@hoge=(1,2)なら12と出力 変数の要素数を出力するときは’’(シングルクォーテーション)で囲む print @hoge ----@hoge=(1,2)なら2と出力 文字列を連結する時は「.」を使う print "$a"."$b" 36進数<=>10進数 (参考) +... use strict; my $base_str = "0123456789abcdefghijklmnopqrstuvwxyz"; my $base_36 = convert_36(1234567); print "$base_36\n"; my $base_10 = convert_10($base_36); print "$base_10\n"; sub convert_36 { my $number = shift; my @work; while ($number 0) { unshift @work, substr($base_str, $number % 36, 1); $number = int($number / 36); } return join( , @work); } sub convert_10 { my @work = reverse split //, shift; my $number; foreach my $idx (0 .. $#work) { $number += index($base_str, $work[$idx]) * (36 ** $idx); } return $number; } コメントアウト(複数行)参考 print "ここは実行されます。\n"; =pod ここはコメント行になります。 ここもコメント行になります。 =cut print "ここも実行されます。\n"; 論理演算子 ストリングの比較に==は使えない。eqを使う。 ENDサブルーチン(スクリプト終了時に実行)参考 END { print "END!"; } useとrequireの違い ココ メモリの使用量が~とかあるけど、気にしないなら全部useでいいんじゃないだろうか? 重複値の削除 ここ 簡単なのは my @data = qw(aa dd bb cc dd cc bb aa); my %uniq = map {$_ = 1} @data; ※配列の要素をkeyとしてkeyの要素 my @data2_1 = keys %uniq; を1とする(同じkeyは上書き?されて消える) マッチングー正規表現ー こことか 数字のみの文字列抜き出し =~ m/^[0-9]+$/ ファイル操作 ファイルの日本語読み込み(参考)読み込むファイルがUTF-8で書かれているなら、次のようにopenで指定する。 open(FH, " utf8", $filename); 読み込むファイルがshift-jisなど、UTF-8以外のコードで書かれているなら、次のようにencodingをopenで用いて指定する。 pen(FH, " encoding(shiftjis)", $filename); 行数を数える ファイル読み込み後$.に格納されている(参考の中から最後のを参照。) open(FILE, hoge ) or die; print $. . 行\n ; close(FILE) [部分編集] GUI 入門 ここをみながら色々と リファレンス1 2 3 デモ(sample)-これが一番参考になるかもコマンドプロンプトで~/Perl/site/lib/Win32/GUI/demosに移動(デフォルトの場合) 以下実行 win32-gui-demos メモ nameを大文字から始めるとボタンのCheckが参照できずうまくいかない ファイルを開くダイアログ(参考) +... use strict; use warnings; use utf8; use Win32 GUI(); my $file = "\0" . " " x 256; my $ret = Win32 GUI GetOpenFileName( -title = "Win32 GUI GetOpenFileName test", -file = "\0" . " " x 256, -filter = [ "Text documents (*.txt)" = "*.txt", "Perl stuff (*.pl, *.pm)" = "*.pl;*.pm", "All files", "*.*", ], ); if($ret) { print "GetOpenFileName returned $ret \n"; } else { if(GUI CommDlgExtendedError()) { print "ERROR. CommDlgExtendedError is ", GUI CommDlgExtendedError(), "\n"; } else { print "You cancelled.\n"; } } Textfield GetStringは使えず、Text()でGet&Setができる [部分編集] XML XML Simple とりあえずココとかココとか XML treePP ココ デバッグモード コマンドプロンプトで以下実行(参考) perl -d hoge.pl Mechanize 参考 文字化け対策 ここ
https://w.atwiki.jp/fattencho/pages/15.html
Perl ワンライナー エンコード echo "@" | perl -ne s/([^\w ])/"%".unpack("H2",$1)/eg;s/ /\+/g;print;print "\n"; デコード perl -MURI Escape -wle print uri_unescape $ARGV[0] http //ja.wikipedia.org/wiki/%E3%81%93%E3%81%88%E9%83%A8 # perlでデーモン作成 #!/usr/local/bin/perl use strict; use warnings; my $PID; my $PID_FILE = "/home/fattencho/daemon.pid"; my $SLEEP_INTERVAL = 10; main(@ARGV); exit(0); sub main { my ($act) = @_; $act ||=""; if ($act eq "start"){ #daemonの起動 #複数の起動はできません if( get_pid_file() ){ print "$0 is already running\n"; return; } init(); action(); return; } if ($act eq "stop"){ #daemonの停止 my $pid = get_pid_file(); if(not defined $pid){ print "$0 is not running\n"; return; } #pid fileを削除すると、後でkillされます return del_pid_file(); } print "usage $0 [start|stop]\n"; return; } sub init { my $pid = fork; # Fork failure. if($pid 0){ exit -1; } # Fork success. elsif($pid){ exit 0; } #signal送信時に実行するmethod $SIG{INT} = $SIG{HUP} = $SIG{QUIT} = $SIG{KILL} = $SIG{TERM} = interrupt ; $PID = $$; set_pid_file($PID); } sub action { while(1) { sleep($SLEEP_INTERVAL); #pidファイルが削除されていれば、自分自身をkillします if (not get_pid_file() ){ kill $PID; return; } } } sub interrupt { my ($sig) = @_; $SIG{$sig} = IGNORE ; return del_pid_file(); } sub get_pid_file { #pid fileの名称とpidの取得 return undef if not -e $PID_FILE; open my $fh, $PID_FILE or die "can t open $PID_FILE $!"; my ($line) = $fh ; close $fh or die "can t close $PID_FILE $!"; my ($pid) = $line =~ /(\d+)/o; return ($PID_FILE,$pid); } sub get_pid_file { #pid fileの名称とpidの取得 return undef if not -e $PID_FILE; open my $fh, $PID_FILE or die "can t open $PID_FILE $!"; my ($line) = $fh ; close $fh or die "can t close $PID_FILE $!"; my ($pid) = $line =~ /(\d+)/o; return ($PID_FILE,$pid); } sub set_pid_file { #pid fileにpidを書き込み my ($process_id) = @_; open my $fh, " $PID_FILE" or die "can t open $PID_FILE $!"; print $fh $process_id; close $fh or die "can t close $PID_FILE $!"; } sub del_pid_file { unlink $PID_FILE or die "can t unlink $PID_FILE $!"; } 1;
https://w.atwiki.jp/atwikimyj/pages/49.html
オブジェクトとは、 パッケージ名と関連づけられたリファレンス を指します。 といって納得できる人は少ないと思います。概念的な 定義がはっきりしないものばかりなので、、。 別の言い方をすると、 まずパッケージというものがあります。 いろんな属性値や、処理をするルーチンを 組み合わせたものです。 これは設計図とか、型みたいなもので、それ自体 は実体ではないのです。 このパッケージを元にオブジェクトというものを 作ります。オブジェクトを作ってそのオブジェクトを いじっていろんなことに使うと便利だからこのような ことをするのです。 そのオブジェクトは、リファレンスの仕組みを使って いろいろといじるのです。 うーん、わかりづらいですね。 オブジェクトを作成するには (1)パッケージを作る (2)use文でそのパッケージを利用することを宣言 (3)パッケージを使って新しいオブジェクトを作成 (4)そのオブジェクトに引数を入れたり出したりして使う ああ便利ねー、となります。
https://w.atwiki.jp/usonx/pages/18.html
ファイル名生成(拡張子だけ変更) $filename = (split(/\./,$ARGV[0]))[0]; $filename = $filename.".csv"; 1が立っているbit数を数える sub bitcount { # 1の数を数える $bits = $_[0]; $bits = ($bits 0x55555555) + ($bits 1 0x55555555); $bits = ($bits 0x33333333) + ($bits 2 0x33333333); $bits = ($bits 0x0f0f0f0f) + ($bits 4 0x0f0f0f0f); $bits = ($bits 0x00ff00ff) + ($bits 8 0x00ff00ff); return ($bits 0x0000ffff) + ($bits 16 0x0000ffff); } 実行環境におけるlocaltimeの取得方法 # 実行環境のlocaltimeを取得(普通はJST) my $now = time(); my $off = (timegm(localtime($now))-timegm(gmtime($now)))/60; printf( "%+03d %02d\n", $off/60, $off%60 ); 時刻フォーマットの読み込み方 $utc0にyy/mn/dd hh mm ssのテキストが入っている $utc0=~ /(\d+)\/(\d+)\/(\d+) (\d+) (\d+) (\d+)/; my $yy = $1; my $mn = $2; my $dd = $3; my $hh = $4; my $mm = $5; my $ss = $6; フォルダ内にあるファイルリストの取得 exe化にも問題にならないので、良い感じ。glob()はエラーになってしまう。plのままなら、globが良い。 opendir(DIRHANDLE, "./"); my $cnt = 0; foreach(readdir(DIRHANDLE)){ next if /^\.{1,2}$/; # . や .. をスキップ $file[$cnt] = $_; $cnt++; } closedir(DIRHANDLE); perlで符号付き型変換 # 16進を符号付き10進に変換する sub dec2dec() { my $val = shift; my $bit = shift; # 範囲確認 #if ( ($val (2**($bit-1)-1)) or ($val -(2**($bit-1)))) { # die "$valは指定されたビット数$bitでは2の補数表現ができません。?n"; #} if($val (2**($bit-1)-1)) { # 負値なら return $val - (2**$bit); }else{ # 正値なら return $val; } } 改行コード0x0Dを付けない Windowsでは、改行コードが0x0D0Aであるため、テキストデータでは、自動で改行コードが変換される。しかし、バイナリ出力では0x0Aを出力しようとすると、勝手に0x0D0Aに変換されてしまうという弊害となる。そこで、この自動変換を止めるには、下記のようにすれば良い。 open OUT, " raw", "data1.txt"; 0x0A を出力する時に 0x0A → 0x0D, 0x0A という置換をするには、↓か、無印 open OUT, " crlf", "data2.txt"; テキストをバイナリに変換する perl内のテキストデータをそのままバイナリに変換する。もちろん、テキストデータは16進数内のテキスト[A-F\d]である必要がある。 foreach(@line) { my $disp = $_; # 改行コード削除 $disp =~ s/\s//gi; # 出力 print OUT pack("H*", $disp); } バイナリデータ読み込み 読み込みだけでなく、書き込みの時も同様。ファイルポインタをbinmodeにする必要がある。 以下の方法は読み込むデータが大きい時には使えない(Out of memory!と言われる) open INFILE, " $ARGV[0]" or die "file open error $!"; # バイナリモードに変更 binmode INFILE; for( my $i = 0; $i 4; $i++ ) { my $buf; # 名前と得点を読み込む #read INFILE, $buf, 1; sysread(INFILE, $buf, -s INFILE); # $bufをアンパック my @temp = unpack C* , $buf; my $ch = unpack("H2", pack("C", $temp[0])); my $disp = sprintf("0x%02X\n",$temp[0]); print $disp; } # ファイルを閉じる close INFILE; そのような場合は、1Byteずつ読み込んで処理する # 対象のファイルオープン open INFILE, " $ARGV[0]" or die "file open error $!"; # バイナリモードに変更 binmode INFILE; # 出力ファイル open OUT," $str1" or die "file open error 2 $!"; $cnt = 1; while(1) { last if undef == read(INFILE, $code, 1); $data = sprintf("%02X", unpack("C",$code) ); #$data = unpack("W",pack( C ,hex($data))); print OUT $data; } 平均値/標準偏差 # 平均値算出 for($i=0;$i $cnt;$i++) { # x行目の処理 $ave_cnt[$i] = 6; $ave[$i] = 0; # 平均値の個数集計 if(int($AZ00[$i]) == 0){$ave_cnt[$i]--;}else{$ave[$i] += $AZ00[$i];} if(int($AZ10[$i]) == 0){$ave_cnt[$i]--;}else{$ave[$i] += $AZ10[$i];} if(int($AZ15[$i]) == 0){$ave_cnt[$i]--;}else{$ave[$i] += $AZ15[$i];} if(int($AZ20[$i]) == 0){$ave_cnt[$i]--;}else{$ave[$i] += $AZ20[$i];} if(int($AZ30[$i]) == 0){$ave_cnt[$i]--;}else{$ave[$i] += $AZ30[$i];} if(int($AZ40[$i]) == 0){$ave_cnt[$i]--;}else{$ave[$i] += $AZ40[$i];} # その行の個数が0ならaveも0 if($ave_cnt[$i] == 0){ $ave[$i] = 0; }else{ $ave[$i] = $ave[$i]/$ave_cnt[$i]; } } # 標準偏差算出 for($i=0;$i $cnt;$i++) { # x行目の処理 $std[$i] = 0; # 標準偏差の処理 値が0なら飛ばす if(int($AZ00[$i]) != 0){$std[$i] += ($AZ00[$i] - $ave[$i])*($AZ00[$i] - $ave[$i]);} if(int($AZ10[$i]) != 0){$std[$i] += ($AZ10[$i] - $ave[$i])*($AZ10[$i] - $ave[$i]);} if(int($AZ15[$i]) != 0){$std[$i] += ($AZ15[$i] - $ave[$i])*($AZ15[$i] - $ave[$i]);} if(int($AZ20[$i]) != 0){$std[$i] += ($AZ20[$i] - $ave[$i])*($AZ20[$i] - $ave[$i]);} if(int($AZ30[$i]) != 0){$std[$i] += ($AZ30[$i] - $ave[$i])*($AZ30[$i] - $ave[$i]);} if(int($AZ40[$i]) != 0){$std[$i] += ($AZ40[$i] - $ave[$i])*($AZ40[$i] - $ave[$i]);} # その行のstdを出力 if($ave_cnt[$i] = 0){ $std[$i] = 0; }else{ # n法 標準偏差 $std[$i] = sqrt($std[$i]/($ave_cnt[$i])); } } ビットシフトサンプル #!/usr/bin/perl # 以下は変更する必要なし #----------------------------------------------------------------------------- # # acspac2flg (version $Id eodv,v 1.4 2007/05/22 02 22 33 Exp $) # # uc_acsmode_pacテレメをフラグに変換する # # Usage # acspac2flg.pl hogehoge.csv 5 14 # # options # 1.ファイル名指定 #2.SATTIME列指定(0,1,2,3…で数える) #3.acspac列指定(0,1,2,3…で数える) # # example # acspac2flg.pl hogehoge.csv 5 14#(1) # #----------------------------------------------------------------------------- # Libraries my $SATTIME; my $acsmode; my $subacsmode; my $acqsts; my $sunpre; #----------------------------------------------------------------------------- # Code begin #----------------------------------------------------------------------------- ($opt) = @ARGV; if ($opt eq "-h") { show_usage(); exit; } # オプションがない場合 if ($#ARGV == -1){ print "Error ファイル名を指定してください\n"; } # オプションが3つある場合 if ($#ARGV == 2){ # 対象ファイルのオープン open(IN," $ARGV[0]") || die "Error can t open $ARGV[0]\n"; @line = IN ; close(IN); # ヘッダ出力 $disp = sprintf("#SATTIME,acsmode,subacsmode,acqsts,sunpre,pac\n"); print $disp; # pacからフラグへ変換 $cnt = -1; foreach (@line){ # ヘッダ情報を飛ばす if ($cnt == -1){$cnt++; next;} # 衛星時刻 $SATTIME= (split(/\,/,$_))[$ARGV[1]]; # acsmode/subacsmode $temp= hex(((split(/\,/,$_))[$ARGV[2]])); $acsmode= ($temp 0) 0x07; $subacsmode= ($temp 3) 0x07; $acqsts= ($temp 6) 0x01; $sunpre= ($temp 7) 0x01; # 表示 $disp = sprintf("%f,%d,%d,%d,%d,%d\n",$SATTIME,$acsmode,$subacsmode,$acqsts,$sunpre,$temp); print $disp; # インクリメント処理 $cnt++; } } # オプションが2つある場合 if ($#ARGV == 1){ } exit; #----------------------------------------------------------------------------- # Sub code begin #----------------------------------------------------------------------------- sub show_usage() { print "Usage \n"; print " eodv [-h]\n"; print "\n"; print "options \n"; print " -h 利用方法を提示する\n"; print "\n"; print "example \n"; print "eodv -h #(1) HELP\n"; } ASCII - Binary変換 $ascii = pack("H*", $par1); $bainary= unpack("H*", $par1); 文字列に文字を挿入する方法 $zip = "5770001"; substr($zip, 3, 0) = "-"; print $zip; # 577-0001 正規表現参照 行に"#"があるとき、1ループを飛ばす # ヘッダ情報を飛ばす if (/#/){next;} 正規表現置換 スペースをカンマに置換する # csv置換 $log = $_; $log =~ s/\s+/,/g; 正規表現マッチ 先頭からyymmddmm.ssの規則でマッチする場合 if(/^[\d]{8}.[\d]{2}$/){} 2文字ずつに分割($strの文字列を2文字ずつに分割する) my @chars = $str =~ /.{2}/g; 16進数から10進数への変換 但し、16進はCDABなどの形式であること(0xCDABはダメ $temp_Dec = hex($temp_Hex); 16進数(文字)から数字に変換 右側の$dataが16進数文字だったものが、数字に変換される $data = unpack("W",pack( C ,hex($data))); 10進数から2進数への変換 $bins[$i] = unpack( B8 ,pack( C ,$hexs[$i])); 16進数(文字)から実数(IEEE754 単精度float)への変換 $posx_f = unpack "f", pack "L", hex($posx); 16進数(文字)から実数(IEEE754 倍精度double)への変換 これなのだが・・・ 別の参考サイト。こっちがいいかも 1行置換 perl -pi -e "s/txt/text/g" *.html *.pl perl -pi -e "s/\015\012/\015/g" *.txt 参照置換 ()の中身が$1になる。この場合、test,に置換される。 s/(test)/$1,/g 繰り返し置換 s/([A-F\d]{4})/$1,/g; SHIFT-JIS関連の置換 シフトJISでは、「-」や「表」の文字をperlで置換しようとするとエラーとなってしまう そこで以下のようにするとよい($tmp1にシフトJISの文字が来る) $disp =~ s/\Q$tmp1\E/$tmp2/gi; 区切り切り出し ドット「.」区切りの最初の文字列をfilenameに代入 $filename = (split(/\./,$ARGV[0]))[0]; 文字列操作 $tempの0文字目から2文字を代入 $bnum = substr($temp,0,2); perlにおける2次元配列 my @dat = (); $data[0][0] = 1; 数字判定 整数のみであれば下記 $aを適切な変数名に変更すること if($a =~ /^[0-9]+$/){} 実数であれば if($a =~ /^[0-9.\-]+$/){} テキスト出力整形 空白で列を揃えたい場合 $tmp = sprintf("%15.14s",$prv[$i]); system関数(複数ファイルの結合) 引数が2つ以上ある場合は、下記のように指定する必要があるので、注意。 ただsystemは絶対パス指定での実行可能なので、パスが通ってなければsystemが良い。 my @cmd = ( copy , "$tmp*_1Hz.txt",$tmp."_1Hz.tsf"); my $ret=system(@cmd); もう1つのやり方として、 my $cmd = "cat $str1"; my $ret = `$cmd`; 2つのファイルの結合 my @cmd = ( type , $header ,$tmp."_1Hz.txt"," ".$tmp."_1Hz.tsf"); $ret=system(@cmd); reverse関数 reverse関数は、文字列を逆順に並びかえる。 この時、スカラーかリストかにより動作がかわる。 スカラー変数:文字を逆順に並びかえる。 リスト:要素を逆順に並びかえる。 @data = reverse @data; perlスクリプトのテンプレ #!/usr/bin/perl # 以下は変更する必要なし #----------------------------------------------------------------------------- # # csv2srs (version $Id eodv,v 1.4 2007/05/22 02 22 33 Exp $) # # SRSの算出 # # Usage # csv2srs.pl hogehoge.csv # # options # 特に無し # # example # csv2srs.pl hogehoge.csv #(1) # #----------------------------------------------------------------------------- # Libraries my @dt, @dg, @alpa, @beta, @A, @B, @C, @D, @yy; my $tt,$bs,$bb,$ymax; $Q= 10; $PI= 3.1415926; $g = 9.80665;# [m/s2] #----------------------------------------------------------------------------- # Code begin #----------------------------------------------------------------------------- ($opt) = @ARGV; if ($opt eq "-h") { show_usage(); exit; } # オプションがない場合 if ($#ARGV == -1){ print "Error ファイル名を指定してください\n"; } # オプションが1つある場合 if ($#ARGV == 0){ # 対象ファイルのオープン open(IN," $ARGV[0]") || die "Error can t open $ARGV[0]\n"; @line = IN ; close(IN); # SRS算出 $cnt = -1; foreach (@line){ # ヘッダ情報を飛ばす if ($cnt == -1){$cnt++; next;} # 時間[sec]/加速度取得[m/s2] $dt[$cnt+1] = (split(/\,/,$_))[0]; $dg[$cnt+1] = (split(/\,/,$_))[1]; # インクリメント処理 $cnt++; } # ヘッダ出力 $disp = sprintf("f[Hz],G[g],Q=%f\n",$Q); print $disp; } # オプションが2つある場合 if ($#ARGV == 1){ } exit; #----------------------------------------------------------------------------- # Sub code begin #----------------------------------------------------------------------------- sub show_usage() { print "Usage \n"; print " eodv [-h]\n"; print "\n"; print "options \n"; print " -h 利用方法を提示する\n"; print " -make Level-2を更新する\n"; print "\n"; print "example \n"; print "eodv -h #(1) HELP\n"; } perlスクリプトのexe化 perlスクリプトをexe化する方法がある。exe化する理由としては、perl実行環境がない人への配布等、perlが分からない人にあげても当然実行も加工もできないので、exe化してアプリケーションとして配布すると便利である。 exe化にはいくつか方法がある。perl2exeは簡単に変換環境を整えることができるが、フリーではないことと、ファイル読み込み(おそらくパスの指定)でエラーが出る(原因がよくわからない)。個人的にはPARがオススメ。ただし、PARは環境を整えるのが大変である。 perl2exe http //www.indigostar.com/perl2exe.htm PAR http //hamachiya.com/junk/memo_PAR.html perl2exeのバージョンアップにより、パス問題が解決されているもよう?簡単にplをexe化でき、ほぼ想定通りに動かすことができた。PARの環境を整えるより簡単なので、良いかも…。 使い方は、コマンドプロンプト上で、「perl2exe.exe hoge.pl」でOK 組込み用のモジュールを使用している場合は、上手く変換できない場合がある。 32bit:p2x-9.100-Win32 http //www.indigostar.com/perl2exe.php perl2exeで変換できる(できている?)モジュール use Time Local; use File Basename;
https://w.atwiki.jp/pgmg/pages/15.html
perldoc 簡単な使い方 perldoc Perlの概要 perldoc perl1 rand関数の説明 perldoc -f rand 数と数列 用語確認 変数 変数の値 代入 代入演算子 = デバッグプリント コメントの付け方 二重引用符と一重引用符の違い 変数名を表示する場合 文字列に"を表示させたい場合 演算子 加算 + 減算 - 乗算 * 除算 / 0で割ることはできない 剰余 % 0では実行できない 累乗 ** 1増加 ++ 1減少 -- Tips 切捨 関数 intを使う print int(365 / 7); 52 四捨五入 0.5を加えてから関数intを使う my $x = 1234.6; print int($x + 0.5); ⇒1235 曜日の計算 現在から$day日後の曜日は、$day % 7 で計算可能 0:日曜、1:月曜、2:火曜、…6:土曜となる。 文字列 挿入 連結 注意事項 print "," と"."の違い print "Programming Lesson", "\n" (a) print "Programming Lesson"."\n"; (b) (a)は文字列2つ、(b)は文字列1つ 数値コンテキスト 演算子+は、両辺に数が来ることを期待する 数値と文字列を足してもOK ただし、"a" + "b"は数として判断できないので0として扱う 文字列コンテキスト 文字列結合演算子(.)は、両辺に文字列が来ることを期待する 数値123と456を(.)で結合すると文字列"123456"として扱われる。
https://w.atwiki.jp/ohden/pages/351.html
Perl tool cpanminus CPANに変わるPerlLibrary用インストーラらしい。未使用なのでどんなもんか不明。 更新日: 2011年02月25日 (金) 09時01分25秒 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/bg1wiki/pages/19.html
トピック ノート Howdy, perl! ソースコード howdyperlプロジェクト サブカテゴリ 特になし